home *** CD-ROM | disk | FTP | other *** search
/ Software USA 3 #11 / Software USA Volume 3.11.iso / mac / Games / World Builder / Ray's World Builder Demo / "Locked Door" Code < prev    next >
Text File  |  1995-11-27  |  19KB  |  415 lines

  1. By Ray R. Dunakin III
  2.  
  3. This is the entire scene code from the scene titled, “Locked Room.” Following it is a breakdown of the code into sections, with explanations of each section.
  4.  
  5. *********************************************************
  6.  
  7. IF{TEXT$=OPEN}THEN
  8.     PRINT{.....................................}
  9.     PRINT{Click on the thing you want to open.}
  10. EXIT
  11. IF{TEXT$=CLOSE}THEN
  12.     PRINT{.....................................}
  13.     PRINT{Click on the thing you want to close.}
  14. EXIT
  15. IF{TEXT$=SOUTH}THEN
  16.     IF{LD.CLOSED=SCENE@}THEN
  17.         PRINT{.....................................}
  18.         PRINT{The door is closed.}
  19.     EXIT
  20. END
  21. IF{CLICK$=TOP.CLOSED}THEN
  22.     PRINT{.....................................}
  23.     SOUND{SLIDE.1}
  24.     MOVE{TOP.OPEN}TO{SCENE@}
  25.     IF{MATCHES=STORAGE@}THEN
  26.         MOVE{MATCHES}TO{SCENE@}
  27.         PRINT{Inside the drawer you find some matches.}
  28.     EXIT
  29.     PRINT{The top drawer is empty.}
  30. EXIT
  31. IF{CLICK$=TOP.OPEN}THEN
  32.     SOUND{SLIDE.1}
  33.     MOVE{TOP.OPEN}TO{STORAGE@}
  34. EXIT
  35. IF{CLICK$=BOTTOM.CLOSED}THEN
  36.     PRINT{.....................................}
  37.     SOUND{SLIDE.1}
  38.     MOVE{BOTTOM.OPEN}TO{SCENE@}
  39.     IF{PISTOL=STORAGE@}THEN
  40.         MOVE{PISTOL}TO{SCENE@}
  41.         PRINT{Inside the drawer you find a pistol.}
  42.     EXIT
  43.     PRINT{The bottom drawer is empty.}
  44. EXIT
  45. IF{CLICK$=BOTTOM.OPEN}THEN
  46.     SOUND{SLIDE.1}
  47.     MOVE{BOTTOM.OPEN}TO{STORAGE@}
  48. EXIT
  49. IF{CLICK$=LEFT.CLOSED}THEN
  50.     PRINT{.....................................}
  51.     SOUND{DOOR OPENING}
  52.     MOVE{LEFT.CLOSED}TO{STORAGE@}
  53.     IF{CASH=STORAGE@}THEN
  54.         MOVE{CASH}TO{SCENE@}
  55.         LET{X1#=7}
  56.         PRINT{There is some cash in the cabinet! To count your money, enter a dollar sign.}
  57.     EXIT
  58.     PRINT{The left cupboard is empty.}
  59. EXIT
  60. IF{CLICK$=LEFT.OPEN}THEN
  61.     SOUND{DOOR CLOSING}
  62.     MOVE{LEFT.CLOSED}TO{SCENE@}
  63. EXIT
  64. IF{CLICK$=RIGHT.CLOSED}THEN
  65.     PRINT{.....................................}
  66.     SOUND{DOOR OPENING}
  67.     MOVE{RIGHT.CLOSED}TO{STORAGE@}
  68.     IF{POTION=STORAGE@}AND{PHYS.STR.BAS#<200}THEN
  69.         MOVE{POTION}TO{SCENE@}
  70.         PRINT{There is a strange liquid potion in the cabinet.}
  71.     EXIT
  72.     PRINT{The right cupboard is empty.}
  73. EXIT
  74. IF{CLICK$=RIGHT.OPEN}THEN
  75.     SOUND{DOOR CLOSING}
  76.     MOVE{RIGHT.CLOSED}TO{SCENE@}
  77. EXIT
  78. IF{CLICK$=LD.CLOSED}THEN
  79.     PRINT{.....................................}
  80.     IF{D1#<1}THEN
  81.         PRINT{This door is locked.}
  82.     EXIT
  83.     SOUND{DOOR OPENING}
  84.     MOVE{LD.CLOSED}TO{STORAGE@}
  85.     PRINT{The door SOUTH is now open.}
  86. EXIT
  87. IF{CLICK$=LD.OPEN}THEN
  88.     SOUND{DOOR CLOSING}
  89.     MOVE{LD.CLOSED}TO{SCENE@}
  90. EXIT
  91. IF{TEXT$=USE}THEN
  92.     PRINT{.....................................}
  93.     IF{TEXT$=KEY}THEN
  94.         IF{KEY>PLAYER@}THEN
  95.             PRINT{You don't have a key.}
  96.         EXIT
  97.         SOUND{PISTOL-COCKING.1}
  98.         IF{D1#<1}THEN
  99.             LET{D1#=1}
  100.             PRINT{The door is now unlocked and can be opened when you click on it.}
  101.         EXIT
  102.         MOVE{LD.CLOSED}TO{SCENE@}
  103.         LET{D1#=0}
  104.         PRINT{The door is now locked again.}
  105.     EXIT
  106.     IF{TEXT$=PISTOL}OR{TEXT$=GUN}THEN
  107.         IF{PISTOL=PLAYER@}THEN
  108.             PRINT{What do you want to shoot?}
  109.         EXIT
  110.         PRINT{You don't have a gun.}
  111.     EXIT
  112. END
  113. IF{TEXT$=SHOOT}THEN
  114.     PRINT{.....................................}
  115.     IF{PISTOL>PLAYER@}THEN
  116.         PRINT{You don't have a gun.}
  117.     EXIT
  118.     SOUND{GUNSHOT}
  119.     IF{TEXT$=DOOR}OR{TEXT$=LOCK}THEN
  120.         PRINT{The bullet just ricochets off the sturdy lock on the door.}
  121.     EXIT
  122.     IF{TEXT$=CABINET}THEN
  123.         PRINT{That might damaged whatever is inside. Besides, it's not even locked.}
  124.     EXIT
  125. END
  126. IF{TEXT$=GET}OR{TEXT$=TAKE}THEN
  127.     PRINT{.....................................}
  128.     IF{TEXT$=NOTE}THEN
  129.         PRINT{You can't get the note off the wall.}
  130.     EXIT
  131.     IF{TEXT$=LAMP}AND{LAMP.1=SCENE@}THEN
  132.         MOVE{LAMP.1}TO{STORAGE@}
  133.         MOVE{LAMP}TO{PLAYER@}
  134.         PRINT{You now have the lamp. There is still some fuel in it.}
  135.         IF{L1#=1}THEN
  136.             PRINT{The lamp is already lit, and gives off a steady glow.}
  137.         EXIT
  138.         PRINT{The lamp is not lit.}
  139.     EXIT
  140. END
  141. IF{TEXT$=READ}THEN
  142.     IF{TEXT$=NOTE}THEN
  143.         MOVE{NOTE.2}TO{SCENE@}
  144.         PRINT{.....................................}
  145.         PRINT{The note looks like someone's list of things to remember.}
  146.     EXIT
  147. END
  148. IF{CLICK$=NOTE.2}THEN
  149.     MOVE{NOTE.2}TO{STORAGE@}
  150. EXIT
  151. IF{CLICK$=NOTE.1}THEN
  152.     PRINT{.....................................}
  153. END
  154. IF{TEXT$=UNLOCK}THEN
  155.     PRINT{.....................................}
  156.     PRINT{What do you want to use to unlock the door?}
  157. EXIT
  158. IF{TEXT$=PICK}AND{TEXT$=LOCK}THEN
  159.     PRINT{.....................................}
  160.     PRINT{You don’t have anything suitable for the task.}
  161. EXIT
  162.  
  163. **************End of code**************************
  164.  
  165. In this scene, there are two drawers that can be opened and closed, and two cupboard doors that can be opened and closed. There is also a door, which initially is locked. The player must find the key to open the door. On top of the cabinet there is a kerosene lamp that can be carried and lit, using matches. And on the wall there is a note. When the player reads the note, a closeup view is presented.
  166.  
  167. The first two statements in the scene code test for the words “open” and “close.” If the player enters the word “open,” text is printed telling the player to click on the thing he wants to open. If the player enters the word “close,” then he is told to click on the thing he wants to close:
  168.  
  169. IF{TEXT$=OPEN}THEN
  170.     PRINT{.....................................}
  171.     PRINT{Click on the thing you want to open.}
  172. EXIT
  173. IF{TEXT$=CLOSE}THEN
  174.     PRINT{.....................................}
  175.     PRINT{Click on the thing you want to close.}
  176. EXIT
  177.  
  178.  
  179. The statement below handles the player’s attempts to move south, the direction of the locked door. Object “LD.CLOSED” is a drawing of the closed door. It covers another object, LD.OPEN, that is invisible. If LD.CLOSED is in the scene, then the door is closed, and the inner statement is true. Text is then printed telling the player that the door is closed. This statement closes with EXIT, preventing the program from moving the player in that direction. 
  180.  
  181. If LD.CLOSED is not in the scene, then the door is open, and the statement closes with END, allowing the player to be automatically moved to the next scene.
  182.  
  183. IF{TEXT$=SOUTH}THEN
  184.     IF{LD.CLOSED=SCENE@}THEN
  185.         PRINT{.....................................}
  186.         PRINT{The door is closed.}
  187.     EXIT
  188. END
  189. The drawers and doors each consist of two objects. The first is a drawing of the door or drawer in the closed position. These objects are in the scene at the beginning. In the case of the drawers, when the player clicks on the closed drawing (object), a sound is played and the object/drawing of the open drawer is moved to the scene, covering the “closed” object completely. The code below handles this action when the player clicks on the “closed” top drawer:
  190.  
  191. IF{CLICK$=TOP.CLOSED}THEN
  192.     PRINT{.....................................}
  193.     SOUND{SLIDE.1}
  194.     MOVE{TOP.OPEN}TO{SCENE@}
  195.     IF{MATCHES=STORAGE@}THEN
  196.         MOVE{MATCHES}TO{SCENE@}
  197.         PRINT{Inside the drawer you find some matches.}
  198.     EXIT
  199.     PRINT{The top drawer is empty.}
  200. EXIT
  201.  
  202. >>>In the code above, the first statement tests to see if the player has clicked on the closed top drawer, an object called TOP.CLOSED. If so, the sound is played, and the drawing of the open drawer (TOP.OPEN) is moved to the scene. A nested statement check to see if the “matches” object is in storage. If so, then the matches are moved to the scene, and text is printed telling the player what he has found. If not, then the statement is ignored, and text is printed telling the player that the drawer is empty.<<<
  203.  
  204.  
  205. The following code moves the TOP.OPEN object to storage and plays the appropriate sound when the player clicks on it. This creates the effect of closing the top drawer:
  206.  
  207. IF{CLICK$=TOP.OPEN}THEN
  208.     SOUND{SLIDE.1}
  209.     MOVE{TOP.OPEN}TO{STORAGE@}
  210. EXIT
  211.  
  212.  
  213. The next two sections of code are the same as the last two. They handle the opening and closing of the bottom drawer. When the player clicks on the drawing of the bottom drawer closed (BOTTOM.CLOSED) a sound is played and the “open” drawing/object is moved to the scene. A nested statement checks to see if the pistol is in storage, and if so, moves it to the scene. When the player clicks on the “open” drawer, it is moved to storage:
  214.  
  215. IF{CLICK$=BOTTOM.CLOSED}THEN
  216.     PRINT{.....................................}
  217.     SOUND{SLIDE.1}
  218.     MOVE{BOTTOM.OPEN}TO{SCENE@}
  219.     IF{PISTOL=STORAGE@}THEN
  220.         MOVE{PISTOL}TO{SCENE@}
  221.         PRINT{Inside the drawer you find a pistol.}
  222.     EXIT
  223.     PRINT{The bottom drawer is empty.}
  224. EXIT
  225.  
  226. IF{CLICK$=BOTTOM.OPEN}THEN
  227.     SOUND{SLIDE.1}
  228.     MOVE{BOTTOM.OPEN}TO{STORAGE@}
  229. EXIT
  230.  
  231.  
  232. The code below handles opening and closing of the left and right cupboard doors. This is similar to the drawers, except that both the “open” and “closed” objects are in the scene at the beginning. When the “closed” object is clicked on, a “door opening” sound is played and the “closed” object is moved to storage. Then a nested statement checks to see if the objects the player is supposed to find are in storage. If so, those objects are moved to the scene.
  233.  
  234. When the player clicks on the “open” object, a “door closing” sound is played, and the “closed” object is moved to the scene.
  235.  
  236. When the player finds the cash, variable X1# is set to 7, giving the player seven dollars. This variable keeps track of the player’s money. 
  237.  
  238. IF{CLICK$=LEFT.CLOSED}THEN
  239.     PRINT{.....................................}
  240.     SOUND{DOOR OPENING}
  241.     MOVE{LEFT.CLOSED}TO{STORAGE@}
  242.     IF{CASH=STORAGE@}THEN
  243.         MOVE{CASH}TO{SCENE@}
  244.         LET{X1#=7}
  245.         PRINT{There is some cash in the cabinet! To count your money, enter a dollar sign.}
  246.     EXIT
  247.     PRINT{The left cupboard is empty.}
  248. EXIT
  249.  
  250. IF{CLICK$=LEFT.OPEN}THEN
  251.     SOUND{DOOR CLOSING}
  252.     MOVE{LEFT.CLOSED}TO{SCENE@}
  253. EXIT
  254.  
  255. >>>When the player opens the right side cabinet door, a nested statement checks to see if the “potion” object is in storage, AND if the player’s current physical strength is less than 200. If BOTH of these is true, then the potion is moved to the scene.<<<
  256.  
  257. IF{CLICK$=RIGHT.CLOSED}THEN
  258.     PRINT{.....................................}
  259.     SOUND{DOOR OPENING}
  260.     MOVE{RIGHT.CLOSED}TO{STORAGE@}
  261.     IF{POTION=STORAGE@}AND{PHYS.STR.BAS#<200}THEN
  262.         MOVE{POTION}TO{SCENE@}
  263.         PRINT{There is a strange liquid potion in the cabinet.}
  264.     EXIT
  265.     PRINT{The right cupboard is empty.}
  266. EXIT
  267.  
  268. IF{CLICK$=RIGHT.OPEN}THEN
  269.     SOUND{DOOR CLOSING}
  270.     MOVE{RIGHT.CLOSED}TO{SCENE@}
  271. EXIT
  272.  
  273.  
  274. The code below controls mouse clicks on the door to the south:
  275.  
  276. IF{CLICK$=LD.CLOSED}THEN
  277.     PRINT{.....................................}
  278.     IF{D1#<1}THEN
  279.         PRINT{This door is locked.}
  280.     EXIT
  281.     SOUND{DOOR OPENING}
  282.     MOVE{LD.CLOSED}TO{STORAGE@}
  283.     PRINT{The door SOUTH is now open.}
  284. EXIT
  285.  
  286. The first statement above tests whether the player has clicked on the closed door, and object called LD.CLOSED. If so, then a nested statement checks the condition of variable D1#. If D1# is less than one, the statement is true, and text is printed telling the player that the door is locked. If it is not less than one, then the closed door object, LD.CLOSED, is moved to storage and the player is told that the door SOUTH is now open. 
  287.  
  288. The statement below determines whether the player has clicked on LD.OPEN, an invisible, immobile object that covers the open doorway. If so, then a sound is played and the “closed” door object is moved to the scene:
  289.  
  290. IF{CLICK$=LD.OPEN}THEN
  291.     SOUND{DOOR CLOSING}
  292.     MOVE{LD.CLOSED}TO{SCENE@}
  293. EXIT
  294.  
  295.  
  296. To unlock the door, the player has to “use” the key. “Use” is the standard verb in these situations. The following code handles this:
  297.  
  298. IF{TEXT$=USE}THEN
  299.     PRINT{.....................................}
  300.     IF{TEXT$=KEY}THEN
  301.         IF{KEY>PLAYER@}THEN
  302.             PRINT{You don't have a key.}
  303.         EXIT
  304.         SOUND{PISTOL-COCKING.1}
  305.         IF{D1#<1}THEN
  306.             LET{D1#=1}
  307.             PRINT{The door is now unlocked and can be opened when you click on it.}
  308.         EXIT
  309.         MOVE{LD.CLOSED}TO{SCENE@}
  310.         LET{D1#=0}
  311.         PRINT{The door is now locked again.}
  312.     EXIT
  313.     IF{TEXT$=PISTOL}OR{TEXT$=GUN}THEN
  314.         IF{PISTOL=PLAYER@}THEN
  315.             PRINT{What do you want to shoot?}
  316.         EXIT
  317.         PRINT{You don't have a gun.}
  318.     EXIT
  319. END
  320.  
  321. >>>In the code above, the first statement checks for entry of the verb “use.” If the player has entered “use”, then a nested statement checks for the word “key.” If the player has entered both “use” and “key” then another statement checks to see if the player actually has the key. If not, then the player is told that he doesn’t have the key.
  322.  
  323. If the player does have the key, then the previous statement is ignored, and a sound is played that simulates the sound of a key in a lock. Then a statement tests the value of the variable D1#. If D1# is less than one, then the door is locked. If the player uses the key and D1# is less than one, then D1# is set to one, and the player is told that he has just unlocked the door.
  324.  
  325. If D1# is already set to one when the player uses the key, then it is reset to 0, and the door is locked once more. For simplicity’s sake, the DOOR.CLOSED object is moved to the scene whenever the player locks the door, so that we don’t have to worry about whether it is open or closed when the player locks it.
  326.  
  327. If the player tries to “use” the pistol in this scene, a statement checks to see if the player actually has the pistol. If so, then the player is asked “What do you want to shoot?” This prompts the player to enter “shoot lock” if that is what he wants to do.<<<
  328.  
  329.  
  330.  
  331.  
  332.  
  333. It is reasonable to assume that some players may try to shoot the lock on the door, rather than finding the key to unlock it. So the code below deals with this action:
  334.  
  335. IF{TEXT$=SHOOT}THEN
  336.     PRINT{.....................................}
  337.     IF{PISTOL>PLAYER@}THEN
  338.         PRINT{You don't have a gun.}
  339.     EXIT
  340.     IF{TEXT$=DOOR}OR{TEXT$=LOCK}THEN
  341.         SOUND{GUNSHOT}
  342.         PRINT{The bullet just ricochets off the sturdy lock on the door.}
  343.     EXIT
  344.     IF{TEXT$=CABINET}THEN
  345.         PRINT{That might damaged whatever is inside. Besides, it's not even locked.}
  346.     EXIT
  347. END
  348.  
  349. >>>In the code above, the first statement tests for entry of the word “shoot.” The first nested statement checks to see if the player has the pistol. If not, then text is printed telling the player that he doesn’t have a gun. If he does have the pistol, that statement is skipped. 
  350.  
  351. The next nested statement tests to see if the player has entered the words “door” or “lock.” Both are treated the same. If either word has been entered, then a gunshot sound is played, and text is printed telling the player that the bullet has bounced off the lock without penetrating it.
  352.  
  353. If the player tries to shoot the cabinet, then the last nested statement tells the player that shooting the cabinet may damage the contents. Finally, the original “shoot” statement closes with END, so if the player tries to shoot any other objects, it will be handled by the default “shoot” statement in the Global code.<<<
  354.  
  355.  
  356. The lamp on the cabinet can’t be picked up by clicking on it. The player has to enter “take lamp” or “get lamp.” Also, the player can’t take the note on the wall in this scene. The code below handles the verbs “get” and “take:”
  357.  
  358. IF{TEXT$=GET}OR{TEXT$=TAKE}THEN
  359.     PRINT{.....................................}
  360.     IF{TEXT$=NOTE}THEN
  361.         PRINT{You can't get the note off the wall.}
  362.     EXIT
  363.     IF{TEXT$=LAMP}AND{LAMP.1=SCENE@}THEN
  364.         MOVE{LAMP.1}TO{STORAGE@}
  365.         MOVE{LAMP}TO{PLAYER@}
  366.         PRINT{You now have the lamp. There is still some fuel in it.}
  367.         IF{L1#=1}THEN
  368.             PRINT{The lamp is already lit, and gives off a steady glow.}
  369.         EXIT
  370.         PRINT{The lamp is not lit.}
  371.     EXIT
  372. END
  373.  
  374. >>>The first statement in the above code checks for entry of the words “get” or “take.” A nested statement then checks for use of the word “note.” If this statement is true, then text is printed telling the player that he can’t take the note. 
  375.  
  376. The second nested statement checks for the word “lamp” and also checks to see if the immobile lamp object (LAMP.1) is in the scene. If both of these conditions is true, then LAMP.1 is moved to storage and the “lamp” mobile object is moved to the player. Another statement checks to see if the lamp has already been lit, and if so, tells the player that the lamp is lit. If not, that statement is passed over, and text is printed telling the player that the lamp is not lit.
  377.  
  378. Then the original “get/take” statement closes with END, so that any other objects can be picked up normally.<<<
  379.  
  380. The next bit of code handles the player’s request to read the note. The first statement checks for the word “read” and the inner statement checks for the word “note”. (Breaking the two words apart like this makes it possible for the player to enter the words in any form, including as part of a sentence. If the player enters “read the note on the wall,” the program picks up the two key words: “read” and “note.”) Then an object called NOTE.2 is moved to the scene. This object is a close up drawing of the note, allowing the player to see for himself what it contains:
  381.  
  382. IF{TEXT$=READ}THEN
  383.     IF{TEXT$=NOTE}THEN
  384.         MOVE{NOTE.2}TO{SCENE@}
  385.         PRINT{.....................................}
  386.         PRINT{The note looks like someone's list of things to remember.}
  387.     EXIT
  388. END
  389.  
  390. The next statement moves the NOTE.2 object to storage when the player clicks on it:
  391.  
  392. IF{CLICK$=NOTE.2}THEN
  393.     MOVE{NOTE.2}TO{STORAGE@}
  394. EXIT
  395.  
  396.  
  397. All the other objects have special actions when they are clicked on in this scene, and the seperation line is printed as part of those actions. The object NOTE.1 doesn’t have any special actions, so the statement below prints the line of periods when it is clicked, before the object’s description is printed:
  398.  
  399. IF{CLICK$=NOTE.1}THEN
  400.     PRINT{.....................................}
  401. END
  402.  
  403. This next code handles the verb “unlock.” Some players may try to use this verb to unlock the door, instead of entering “use key.” If so, this statement prints text which asks, “What do you want to use to unlock the door?” This prompts the player to enter the correct command in the required format:
  404.  
  405. IF{TEXT$=UNLOCK}THEN
  406.     PRINT{.....................................}
  407.     PRINT{What do you want to use to unlock the door?}
  408. EXIT
  409.  
  410. A resourceful player will always try to pick a lock if the key is not at hand. The following code handles this:
  411.  
  412. IF{TEXT$=PICK}AND{TEXT$=LOCK}THEN
  413.     PRINT{.....................................}
  414.     PRINT{You don’t have anything suitable for the task.}
  415. EXIT